#ifndef __M0601C_DIRVER_H
#define __M0601C_DIRVER_H

#include <QObject>
#include <QtSerialPort/QSerialPort>
#include <QThread>
#include <QQueue>
#include <QMutex>
#include <QByteArray>
#include <QMap>

#define UINT8_DATA(x) static_cast<unsigned char>(x)

class MotorDriver : public QObject
{
    Q_OBJECT
public:
    explicit MotorDriver(QObject *parent = nullptr);
    ~MotorDriver();

    void openSerialPort(const QString &portName, int baudRate); // 打开串口
    void closeSerialPort(); // 关闭串口
    void sendCommand(int motorId, const QByteArray &command); // 发送命令

signals:
    void responseReceived(uint8_t motorId, const QByteArray &response); // 收到响应
    void errorOccurred(const QString &error); // 错误信息

private slots:
    void processQueue(); // 处理命令队列
    void readResponse(); // 读取串口响应

private:
    QSerialPort *serialPort;
    QQueue<QPair<int, QByteArray>> commandQueue; // 命令队列
    QMap<int, QByteArray> responseBuffer;        // 缓存响应
    QMutex mutex;                                // 线程安全保护
    QThread workerThread;                        // 驱动层独立线程
};

#endif
